package com.pactera.asmp.server.utils;

import org.apache.commons.lang3.StringUtils;
import org.quartz.TriggerUtils;
import org.quartz.impl.triggers.CronTriggerImpl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @ProjectName: tlsserver
 * @Package com.pactera.asmp.server.utils
 * @ClassName: CronCountUtil
 * @Description: 根据传入的时间段和 cron 表达式，计算符合的次数并返回
 * @Date 2020/06/08 17:29
 * @Author lvzhiqiang
 * @Version 1.0
 */
public class CronCountUtil {

    private CronCountUtil(){}
    /**
     * 时间段 startTime - endTime 内符合 cron 的次数
     * @param startTime
     * @param endTime
     * @param cron
     * @return
     * @throws ParseException
     */
    public static int count(String startTime, String endTime, String cron) throws ParseException {
        if (StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)
                || StringUtils.isBlank(cron)) {
            return -1;
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);

        CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
        cronTriggerImpl.setCronExpression(cron);

        // 这里的时间是根据corn表达式算出来的值
        List<Date> dates = TriggerUtils.computeFireTimesBetween(
                cronTriggerImpl, null, dateFormat.parse(startTime),
                dateFormat.parse(endTime));

        return dates.size();
    }

}
